home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1998 July / EnigmA AMIGA RUN 29 (1998)(G.R. Edizioni)(IT)[!][issue 1998-07 & 08].iso / earcd / phase5 / lha-ppc / src / append.c next >
C/C++ Source or Header  |  1997-12-04  |  3KB  |  131 lines

  1. /***********************************************************
  2.     append.c -- append to archive
  3. ***********************************************************/
  4. #include "lharc.h"
  5. #include "intrface.h"
  6.  
  7. #ifdef NEED_INCREMENTAL_INDICATOR
  8. #define MAX_INDICATOR_COUNT    64
  9. long        indicator_count;
  10. long        indicator_threshold;
  11. #endif
  12.  
  13. extern int quiet;
  14. extern int compress_method;
  15. extern long int reading_size;
  16. extern unsigned short dicbit;
  17.  
  18. struct interfacing interface;
  19.  
  20. int encode_lzhuf (infp, outfp, size, original_size_var, packed_size_var,
  21.           name,hdr_method)
  22.     FILE *infp;
  23.     FILE *outfp;
  24.     long size;
  25.     long *original_size_var;
  26.     long *packed_size_var;
  27.     char *name;
  28.     char *hdr_method;
  29. {
  30.     static int method = -1;
  31.  
  32.     if (method < 0) {
  33.         method = compress_method;
  34.         if (method > 0) method = encode_alloc(method);
  35.     }
  36.  
  37.     interface.method = method;
  38.  
  39.     if (interface.method > 0) {
  40.         interface.infile = infp;
  41.         interface.outfile = outfp;
  42.         interface.original = size;
  43.         start_indicator (name, size, "Freezing",1<<dicbit);
  44.         encode(&interface);
  45.         *packed_size_var = interface.packed;
  46.         *original_size_var = interface.original;
  47.     } else {
  48.       copyfile(infp, outfp, size, 1);
  49.       *packed_size_var = *original_size_var = size;
  50.     }
  51.     bcopy ("-lh -", hdr_method, 5);
  52.     hdr_method[3] = interface.method + '0';
  53.  
  54.     finish_indicator2 (name, "Frozen",
  55.                (int)((*packed_size_var * 100L) / *original_size_var ));
  56.     return crc;
  57. }
  58.  
  59. void
  60. start_indicator (name, size, msg, def_indicator_threshold)
  61. char *name;
  62. long size;
  63. char *msg;
  64. long def_indicator_threshold;
  65. {
  66. #ifdef NEED_INCREMENTAL_INDICATOR
  67.     long    i;
  68.     int    m;
  69. #endif
  70.  
  71.     if (quiet)
  72.         return;
  73.  
  74. #ifdef NEED_INCREMENTAL_INDICATOR
  75.     m = MAX_INDICATOR_COUNT - strlen (name);
  76.     if (m < 0)
  77.         m = 3;        /* (^_^) */
  78.     printf ("\r%s\t- %s :  ", name, msg);
  79.     indicator_threshold =
  80.         ((size  + (m * def_indicator_threshold - 1)) /
  81.          (m * def_indicator_threshold) *
  82.          def_indicator_threshold);
  83.     if ( indicator_threshold )
  84.         i = ((size + (indicator_threshold - 1)) / indicator_threshold);
  85.     else
  86.         i = 0;
  87.     while (i--)
  88.         putchar ('.');
  89.     indicator_count = 0;
  90.     printf ("\r%s\t- %s :  ", name, msg);
  91. #else
  92.     printf ("%s\t- ", name);
  93. #endif
  94.     fflush (stdout);
  95.     reading_size = 0L;
  96. }
  97.  
  98. void
  99. finish_indicator2 (name, msg, pcnt)
  100.     char *name;
  101.     char *msg;
  102.     int pcnt;
  103. {
  104.     if (quiet)
  105.         return;
  106.  
  107.     if (pcnt > 100) pcnt = 100;    /* (^_^) */
  108. #ifdef NEED_INCREMENTAL_INDICATOR
  109.     printf ("\r%s\t- %s(%d%%)\n", name, msg, pcnt);
  110. #else
  111.     printf ("%s\n", msg);
  112. #endif
  113.     fflush (stdout);
  114. }
  115.  
  116. void
  117. finish_indicator (name, msg)
  118.     char *name;
  119.     char *msg;
  120. {
  121.     if (quiet)
  122.         return;
  123.  
  124. #ifdef NEED_INCREMENTAL_INDICATOR
  125.     printf ("\r%s\t- %s\n", name, msg);
  126. #else
  127.     printf ("%s\n", msg);
  128. #endif
  129.     fflush (stdout);
  130. }
  131.